﻿/*
 * GLGroupBase.h
 *
 *  Created on: Jun 7, 2014
 *      Author: yuliang
 */

#ifndef GLGROUPBASE_H_
#define GLGROUPBASE_H_

#include "GLEntityBase.h"

class CGLGroupBase : public CGLEntityBase {
public:
	CGLGroupBase(Type_t type = 0, int32_t maxMember = MAX_PERSON_NUMBER);
	virtual ~CGLGroupBase();

	virtual inline void Init() { InitChildSize(m_MaxMember); }
	virtual inline void Reset() { CGLEntityBase::Reset(); }
	inline Type_t GetGroupType() const { return m_GroupType; }

	// 设置队伍有效
	inline void SetValid() { SetStatus(ENTITY_STATUS_GROUP_VALID); }
	// 设置队伍无效
	inline void SetInvalid() { RmStatus(ENTITY_STATUS_GROUP_VALID); }
	// 判断此队伍是否有效
	bool IsValid() const { return ExistStatus(ENTITY_STATUS_GROUP_VALID); }

	// 成员个数
	inline uint32_t GetMemberSize() const { return GetRealChildSize(); }
	// 获取一队成员(可能存在空位)
	inline const VecEntity_t* GetMembers() const { return GetChilds(); }
	// 队伍已满
	inline bool MemberFill() const { return GetEmptyIndex() == EntityErrnoFill; }
	// 新增成员
	int32_t AddMember(CGLEntityBase* entity);
	// 移除成员
	inline uint32_t RmMember(CGLEntityBase* entity);
	// 移除成员
	inline CGLEntityBase* RmMember(Index_t index) { return RmChild(index); }
	// 判断是否在队伍里
	inline bool ExistMember(CGLEntityBase* entity) const;
protected:
	Type_t									m_GroupType;			// 队伍类型
	int32_t									m_MaxMember;			// 最大成员数量
};

uint32_t CGLGroupBase::RmMember(CGLEntityBase* entity) {
	if (nullptr == entity)
		return CommonErrnoParam;
	return RmChild(entity);
}

bool CGLGroupBase::ExistMember(CGLEntityBase* entity) const {
	if (nullptr == entity)
		return false;
	if (EntityExistChild == ExistChild(entity))
		return true;
	else
		return false;
}

#endif /* GLGROUPBASE_H_ */
